package com.dxf.chepter08

/**
 *  大数据是对元素集处理,并返回集合
 *
 *   集合元素映射操作:
 *     在Scala中,可以通过map映射操作解决
 *     将集合中每一个元素通过指定功能(函数)映射成新的结果集合,即 将函数作为参数传递给另一个函数,==>函数式编程
 *
 *    HashSet为例:高阶函数map
 *      def map[B](f:(A)=> B) : HashSet[B]
 *      map[B] //[B]  -->泛型
 *
 *      f:(A)=> B     -->函数
 *
 *      HashSet[B]    -->新的集合返回值
 *
 */
object T91_高阶函数和Map映射 {


  def main(args: Array[String]): Unit = {
    println(test(sum _, 1)) //sum _ (sum地址传入,但是不执行)和 sum 的区别是一个执行sum方法,并返回结果,一个传入函数地址

    //在scala中可以直接把函数赋给一个变量
    //var f1 =myPrint() //这是执行方法了
    var f2 = myPrint _


    test2(sayOk _)


  }

  //test 高阶函数, -->可以接受一个函数,该函数接受double,返回double, sum满足要求,可以传入
  def test(f: Double => Double, n1: Double) = {
    f(n1)
  }

  def sum(d: Double): Double = {
    println("sum被调用")
    d + d
  }


  def myPrint(): Unit = {
    println("je;;word")
  }


  //无参 高阶函数,无返回值

  def test2(f: () => Unit) = {
    f()
  }

  def sayOk(): Unit = {
    println("ok")
  }


}

